package com.test.udp.type;

import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

/**
 * UDP协议发送方
 * 1.使用DatagramSocket 指定端口,创建接收端
 * 2.准备容器 封装成DatagramPacket包裹
 * 3.阻塞式接收包裹receive(DatagramPacket p)
 * 4.分析数据(将字节数组还原成基本类型数据)
 * byte[] getByte()
 * getLength()
 * 5.释放资源
 *
 * @author: ybl
 * @create: 2019-05-27 22:38
 **/
public class UDPTypeServer {

    public static void main(String[] args) throws Exception {
        System.out.println("接收方启动中...");

//        1.使用DatagramSocket 指定端口,创建接收端
        DatagramSocket server = new DatagramSocket(9999);
//        2.准备容器 封装成DatagramPacket包裹,创建一个字节数组对象,长度为UDP的最大长度1024*60
        byte[] data = new byte[1024 * 60];
        DatagramPacket packet = new DatagramPacket(data, 0, data.length);
//        3.阻塞式接收包裹receive(DatagramPacket p)
        server.receive(packet); //阻塞式
//        4.分析数据
//        byte[] getByte()
//        getLength()
        //获取包裹内的字节数组
        byte[] packetData = packet.getData();
        DataInputStream dis = new DataInputStream(new BufferedInputStream(new ByteArrayInputStream(packetData)));
        String msg = dis.readUTF();
        int i = dis.readInt();
        boolean b = dis.readBoolean();
        char readChar = dis.readChar();
        System.out.println(msg + " === " + i + " === " + b + " === " + readChar);
//        5.释放资源
        server.close();
    }
}
